﻿using System;

namespace Lesson10_函数重载
{
    class Program
    {
        #region 基本概念
        //函数重载概念
        //在同一语句块(class struct)中
        //函数(方法)名相同
        //函数的参数不同 或 参数的顺序不同
        //最常用的函数重载 WriteLine() 鼠标右键转到定义可查看

        //作用：
        //1.命名一组功能相似的函数，减少函数名的数量，避免命名空间的污染
        //2.提升程序可读性
        #endregion

        #region 实例
        //注意
        //1.重载和返回值类型无关，只和参数类型，个数，顺序有关(参数都一样的情况下，返回值类型不同会报错；参数不一样的情况下，返回值类型不同不会报错)
        //2.调用时 程序会自己根据传入的参数判断使用哪一个重载
        static int CalcSum(int a, int b)
        {
            return a + b;
        }

        //参数数量不同
        static int CalcSum(int a, int b, int c)
        {
            return a + b + c;
        }

        //数量相同 类型不同
        static float CalcSum(int a, float b)
        {
            return a + b;
        }

        //数量相同 顺序不同
        static float CalcSum(float b, int a)
        {
            return b + a;
        }

        //ref out
        //若只是将ref改成out 会报错
        static float CalcSum(ref float b, int a)
        {
            return b + a;
        }

        //可选参数不符合函数重载
        #endregion


        static void Main(string[] args)
        {
            Console.WriteLine(CalcSum(1, 2.1f));
        }
    }
}
